/* 
 * File:   Couloir.cpp
 * Author: poitevjo
 * 
 * Created on 25 novembre 2011, 12:18
 */

#include "Couloir.h"
//Constructeur de la classe//
Couloir::Couloir(Salle SalleDep,Salle SalleArr) {
    this->SalleDep = SalleDep;
    this->SalleArr = SalleArr;
    this->Generer();
}

//Affiche les informations de Cases//
void Couloir::AfficherCases(){
    int it;
    for(it=0;it<Cases.size();it++){
        Cases[it].Afficher();
    }  
}

//Genere le couloir selon salleDep et SalleArr//
void Couloir::Generer(){
    Case c1,c2;
    c1 = SalleDep.getCasegen();
    c2 = SalleArr.getCasegen();
    c1 = Case(c1.getx()+(SalleDep.getlongueurx()/2),c1.gety()+(SalleDep.getlongueury()/2),SymCouloir);
    c2 = Case(c2.getx()+(SalleArr.getlongueurx()/2),c2.gety()+(SalleArr.getlongueury()/2),SymCouloir);
    //c1 : centre de SalleDep
    //c2 : centre de SalleArr
    Cases.push_back(c1);
    
    while(c1.getx() != c2.getx() || c1.gety() != c2.gety()){
        
        if(c1.getx() != c2.getx()){
            //On trace le couloir d'abord horizontalement
            if(c1.getx() < c2.getx()){
                c1 = Case(c1.getx() + 1,c1.gety(),SymCouloir);
                Cases.push_back(c1);
            }else{
                c1 = Case(c1.getx() - 1,c1.gety(),SymCouloir);
                Cases.push_back(c1);
            }
        }else{
            //Puis on le trace verticalement
            if(c1.gety() < c2.gety()){
                c1 = Case(c1.getx(),c1.gety() + 1,SymCouloir);
                Cases.push_back(c1);
            }else{
                c1 = Case(c1.getx(),c1.gety() - 1,SymCouloir);
                Cases.push_back(c1);
            }
         }
        
        }
        Cases.push_back(c2);
        
        if(not SalleDep.EstIdentique(SalleArr)){
            cout << "Couloir généré" << endl;
          }        


}

////////////////////////////Methodes Ascesseurs////////////////////////////////
//retourne Cases//
vector<Case> Couloir::getCases(){
    return Cases;
}


//retourne SalleDep//
Salle Couloir::getSalleDep(){
    return SalleDep;
}

//retourne SalleArr//
Salle Couloir::getSalleArr(){
    return SalleArr;
}